Several circumstances give rise to strings of characters made up of one or more segments connected together. For example, in C++ programming variable names cannot contain spaces, but should be descriptive enough for a programmer to understand how the variable is used. One common mechanism for providing the necessary description is called CamelCase, in which a variable name is made up of one or more concatenated words or word substitutes (e.g., “int” for “integer”), each of which is capitalized, thus creating the appearance of humps in the name like the humps of a camel (i.e., Bactrian rather than dromedary). For example, a variable containing the number of disk drives on a computer could be named DiskDriveCount. CamelCase has been used beyond computer science; for example, many corporate trade names have adopted this technique for providing a single string made up of multiple segments (i.e., EarthLink, PlayStation, DaimlerChrysler). Other mechanisms of separating segments within a string are also common; for example, segments may be separated by a special character such as an underscore (i.e., disk_drive_count in the programming example above), or by punctuation as is commonly used in .NET programming (i.e., System.IO where a period is used to separate the segments).
Where strings are made up of several segments, traditional search methods do not point the searcher to the best results. For example, if a programmer searching for a function that deletes a file uses a simple substring search with the string “file,” the search will return results that include not only file manipulation functions, but also unrelated functions for manipulating profiles (since “profile” contains the substring “file”). The programmer may know that the function he is looking for contains both a word starting with “De” and the word “file,” but may not remember whether the function is called “DelFile” or “DeleteFile” or “DeleteAFile.” Using traditional search methods, the search for “De” and “file” may return the correct function name (e.g., “DeleteFile”) but may also return so many incorrect function names (e.g. GetProfileDescription” and “LaunchProfileReader”) that it may be difficult to identify the function of interest.